// 用来进行权限验证 (拦截 token)
// 导入进度条
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'
// 导入 路由对象
import router from '@/router'
// 导入 store
import store from '@/store'
import {
  Message
} from 'element-ui'
// 定义一个白名单
const WHITE_LIST = ['/404', '/login']
// 添加导入守卫
// 前置守卫(进入到路由之前会触发前置守卫)
router.beforeEach(async (to, from, next) => {
  // 开启进度条
  NProgress.start()
  // to: 跳转到的路由对象
  // from: 从哪里路由对象跳转的
  // next: 回调函数 (是否继续向下执行)
  // 判断是否存在 token:
  const token = store.getters.token
  if (token) {
    // 存在
    //    判断访问的页面是否是 login
    if (to.path === '/login') {
      //          是: 跳转到首页
      Message.info('您已经登录了, 不需要再登录了')
      next('/')
      // 关闭进度条
      NProgress.done()
    } else {
      //          否: 向下执行
      // 判断是否存在用户信息: userInfo
      // 得到用户信息
      const userInfo = store.getters.userInfo
      if (!userInfo.usernama) {
        // 说明用户信息不存在: 得到用户信息(调用actions/getUserInfo)
        await store.dispatch('user/getUserInfo')
      }
      next()
    }
  } else {
    // 不存在
    //    判断访问的页面是在白名单中
    if (WHITE_LIST.indexOf(to.path) !== -1) {
      //        在: 向下执行
      next()
    } else {
      //        不在: 跳转到登录页面
      Message.error('对不起, 您还没有登录')
      // 将之前的 路径 保存
      next(`/login?_redirect=${to.path}`)
    }
  }
})
// 后置守卫(进入到路由之后会触发后置守卫)
router.afterEach((to, from) => {
  // to: 要去的路由
  // from: 从哪个路由来
  // 关闭进度条
  NProgress.done()
})
